package simulaPersistencia;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.uqbar.commons.model.CollectionBasedHome;
import clasesPrincipales.Contacto;

public class ContactoHome extends CollectionBasedHome<Contacto>{

	@Override
	public Class<Contacto> getEntityType() {
		return Contacto.class;
	}

	@Override
	public Contacto createExample() {
		return new Contacto();
	}

	public List<Contacto> buscarByExample(final Contacto example) {
		return super.buscarByExample(example);
	}
	
	protected Predicate getCriterio(final Contacto example) {
		return new Predicate() {
		@Override
		public boolean evaluate(Object contactoEnLista) {
		Contacto enLista = (Contacto)contactoEnLista;
		boolean paraDevolver = true;
		// Arranca en true
		if(example != null && enLista != null) {
		// Si ninguno es null empiezo a comparar cada campo
		// Si alguno, ya sea del ejemplo o del que esta en la lista
		// fuera null, ese campo se omite al comparar
		// pero aun asi, como arranque en true si el resto de los campos
		// coinciden, considera a las personas iguales

			// nombre
			if(enLista.getNombre() != null){
				if (example.getNombre() != null) {
				paraDevolver = paraDevolver && (enLista.getNombre().toLowerCase().contains(example.getNombre().toLowerCase()));
				}
			}
			// telefono
			if(enLista.getTelefono() != null){
				if (example.getTelefono() != null) {
				paraDevolver = paraDevolver && (enLista.getTelefono().contains(example.getTelefono()));
				}
			}
			// mail
			if(enLista.getMail() != null){
				if (example.getMail() != null) {
				paraDevolver = paraDevolver && (enLista.getMail().contains(example.getMail()));
				}
			}
			//ciudad
			if(enLista.getCiudad() != null){
				if (example.getCiudad() != null) {
				paraDevolver = paraDevolver && (enLista.getCiudad().Equals(example.getCiudad()));
				}
			}
			}
		// Finalmente devuelvo el valor. SI alguno de los
		// campos no era igual, va a ser false.
		// En cambio si todos coincidian, sera true.
		return paraDevolver;
		}
		};
		}
	
}
